/* Hoe te Gebruiken:
 * deBon((String[]) bericht,(String) plaatje);
 * noot:
 * bij de String[] wordt elk element uit de array op een nieuw regel gezet.
 * Er zijn 7 regels.
 * De 1e regel is groot, de 2e klein. de rest is normale grootte.
 * Werkt alleen met GIF-plaatje (ja is echt zo, heb ik getest !)
 * plaatje moet in dezelfde package staan !
 * Heb geduld! Printen duurt lang!
 * Gemaakt door: Frankkie
 * (zeer groot gedeelte van de code komt van BlaJF zn site)
 *
 * Niet aan Marcel geven, hij geeft mij ook nooit codes !
 * met zn 'Staat in het Samenwerkingscontract';
 * ->Profiteur<-
 */

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.net.URL;
import javax.swing.ImageIcon;

public class deBon {

    //De variables aanmaken en een standaard waarde geven.
  private PageFormat mPageFormat;
  public static int paperW = 160; //360?
  public static int paperH = 290;
  public static int linksMarge = 15;
  public static String[] message = {"Lucky Bank", "uw saldo:" + " \u20AC" + "250"};
  //Dit is de Standaard tekst, wordt overschreven als je de Constructor aanroept.
  public static String logoImg = "ThaLogo.jpg";
  //Zie message


  //het Begin, dit kan je ook weglaten als je het aanroept via een andere class
  public static void main(String[] args) {
      //Er wordt een bon geprint met de Standaard-tekst en het Standaard plaatje.
    new deBon(message, logoImg);
  }

  //de Constructor
  public deBon(String[] dingen, String imgStr) {
    //Instellingen
    message = dingen;
    logoImg = imgStr;
    //PrinterJob Maken...
    PrinterJob pj = PrinterJob.getPrinterJob();
    mPageFormat = new PageFormat();
    Paper paper = new Paper();
    //paper.setImageableArea(0, 0, 160, 290); //OUD
    paper.setImageableArea(0,0,paperW,paperH);
    //paper.setSize(160, 290); //OUD
    paper.setSize(paperW, paperH);
    mPageFormat.setPaper(paper);


    //lees verder bij OutPrintable()
    pj.setPrintable(new OutPrintable(), mPageFormat);
    {
      try {
        pj.print();
      } catch (PrinterException e) {
        System.out.println(e);
      }
    }
  }


  class OutPrintable implements Printable {
      // Hier gebeurt niet veel spannends
      // dit roept dalijk makeGraphics(g2); aan.
      // Daar gebeuren de belangrijke dingen
    public int print(Graphics g, PageFormat pf, int pageIndex) {
      if (pageIndex != 0) {
        return NO_SUCH_PAGE;
      }
      Graphics2D g2 = (Graphics2D) g;
      makeGraphics(g2);
      return PAGE_EXISTS;
    }
  }

  public void makeGraphics(Graphics2D g3) {
      //Dit wordt aangeroepen door: OutPrintable();

      //8ergrond wit maken
    g3.setColor(Color.white);
    g3.fillRect(0, 0, paperW, paperH);

    //Plaatje
    URL url = this.getClass().getResource(logoImg);
    Image img = new ImageIcon(url).getImage();
    //200*127
    g3.drawImage(img, linksMarge, 15, 200/3, 127/3, null);
    
    //De Tekst
    g3.setColor(Color.black);
    //Eerste Regel (groot)
    g3.setFont(new Font("Monospaced", Font.BOLD, 18));
    g3.drawString(message[0], linksMarge, 70);
    //Tweede (klein)
    g3.setFont(new Font("Monospaced", Font.BOLD, 7));
    g3.drawString(message[1], linksMarge, 70 + (20 * 1));
    //Volgende Regels
    for (int loopi = 2; loopi < message.length; loopi++) {
      g3.setFont(new Font("Monospaced", Font.BOLD, 8));
      g3.drawString(message[loopi], linksMarge, 70 + (20 * loopi));
    }
    //Einde (lijntje aan de onderkant)
    g3.drawLine(10, 280, 150, 280);
  }
}